package br.unifor.ads.desphouse.ui;

import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;

import br.unifor.ads.desphouse.internacionalizacao.Dicionario;
import br.unifor.ads.desphouse.util.SegurancaUtil;
import br.unifor.ads.desphouse.util.VariaveisAmbiente;

/**
 * Tela padrao do sistema
 *  
 * @author Alex Girao
 */
public class Tela extends JFrame {

	private static final long serialVersionUID = 8458980216299634311L;
	
	private JMenuItem jmiFinalidade;
	private JMenuItem jmiUsuarios;
	private JMenuItem jmiDespesa;
	private JMenuItem jmiReceita;
	
	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					Tela frame = new Tela();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public Tela() {
		setTitle(Dicionario.TITULO_APP);
		setSize(PainelGenerico.LARGURA_PADRAO,PainelGenerico.ALTURA_PADRAO);
    	setResizable(false);
    	setVisible(true);
    	setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    	renderizarMenu();
    	VariaveisAmbiente.TELA_PAI = this;
    	atualizarPainel(new PainelAcesso());
	}
	
	public void atualizarPainel(PainelGenerico painel){
		this.getContentPane().removeAll();
		this.validate();
		this.repaint();
		if(painel!=null)
			this.getContentPane().add(painel);
		renderizarMenu();
		this.validate();
		this.repaint();
		
	}
	
	private void renderizarMenu(){
		if(SegurancaUtil.getUsuarioLogado()!=null){
			iniciarComponentes();
			aplicarEventos();
		}
	}
	
	private void iniciarComponentes(){
		JMenuBar jmbMenuPrincipal = new JMenuBar();
		setJMenuBar(jmbMenuPrincipal);
		
		//FINANCEIRO
		JMenu jmnFinanceiro = new JMenu(Dicionario.MENU_FINANCEIRO);
		jmbMenuPrincipal.add(jmnFinanceiro);
		JMenu jmnLancamentos = new JMenu(Dicionario.MENU_LANCAMENTOS);
		jmnFinanceiro.add(jmnLancamentos);
		jmiReceita = new JMenuItem(Dicionario.MENU_RECEITA);
		jmnLancamentos.add(jmiReceita);
		jmiDespesa = new JMenuItem(Dicionario.MENU_DESPESA);
		jmnLancamentos.add(jmiDespesa);
		jmiFinalidade = new JMenuItem(Dicionario.MENU_FINALIDADE);
		jmnFinanceiro.add(jmiFinalidade);
		
		JMenu jmnRelatorios = new JMenu(Dicionario.MENU_RELATORIOS);
		jmbMenuPrincipal.add(jmnRelatorios);
		
		JMenuItem jmiReceitasRelatorio = new JMenuItem(Dicionario.MENU_RECEITA);
		jmnRelatorios.add(jmiReceitasRelatorio);
		
		JMenuItem jmiDespesaRelatorio = new JMenuItem(Dicionario.MENU_DESPESA);
		jmnRelatorios.add(jmiDespesaRelatorio);
		
		JMenuItem jmiBalancoMensal = new JMenuItem(Dicionario.MENU_BALANCO_MENSAL);
		jmnRelatorios.add(jmiBalancoMensal);
		
		JMenuItem jmiBalancoAnual = new JMenuItem(Dicionario.MENU_BALANCO_ANUAL);
		jmnRelatorios.add(jmiBalancoAnual);
		
		JMenu jmnSegurana = new JMenu(Dicionario.MENU_SEGURANÇA);
		jmbMenuPrincipal.add(jmnSegurana);
		
		jmiUsuarios = new JMenuItem(Dicionario.MENU_USUARIO);
		jmnSegurana.add(jmiUsuarios);
	}
	
	private void aplicarEventos(){
		jmiFinalidade.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				renderizarLancamentoTipoListagem();
			}
		});
		jmiUsuarios.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				renderizarUsuarioListagem();
			}
		});
		jmiDespesa.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				renderizarDespesaListagem();;
			}
		});
		jmiReceita.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				renderizarReceitaListagem();;
			}
		});
	}

	private void renderizarLancamentoTipoListagem(){
		atualizarPainel(new PainelLancamentoTipoListagem());
	}
	
	private void renderizarUsuarioListagem(){
		atualizarPainel(new PainelUsuarioListagem());
	}
	
	private void renderizarDespesaListagem(){
		atualizarPainel(new PainelLancamentoListagem(false));
	}
	
	private void renderizarReceitaListagem(){
		atualizarPainel(new PainelLancamentoListagem(true));
	}

	

}
